{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "name:曾露莎"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>Gender</th>\n",
       "      <th>City</th>\n",
       "      <th>Monthly_Income</th>\n",
       "      <th>Loan_Amount_Applied</th>\n",
       "      <th>Loan_Tenure_Applied</th>\n",
       "      <th>Existing_EMI</th>\n",
       "      <th>Employer_Name</th>\n",
       "      <th>Salary_Account</th>\n",
       "      <th>Mobile_Verified</th>\n",
       "      <th>...</th>\n",
       "      <th>EMI_Loan_Submitted</th>\n",
       "      <th>Filled_Form</th>\n",
       "      <th>Device_Type</th>\n",
       "      <th>Var2</th>\n",
       "      <th>Source</th>\n",
       "      <th>Var4</th>\n",
       "      <th>LoggedIn</th>\n",
       "      <th>Disbursed</th>\n",
       "      <th>Age</th>\n",
       "      <th>Lead_Creation_month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>ID000269J40</td>\n",
       "      <td>Male</td>\n",
       "      <td>Delhi</td>\n",
       "      <td>43000</td>\n",
       "      <td>200000.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>otheraccout</td>\n",
       "      <td>Y</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>Web-browser</td>\n",
       "      <td>B</td>\n",
       "      <td>S143</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>38</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ID000467Z20</td>\n",
       "      <td>Male</td>\n",
       "      <td>Delhi</td>\n",
       "      <td>37200</td>\n",
       "      <td>400000.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>Citibank</td>\n",
       "      <td>Y</td>\n",
       "      <td>...</td>\n",
       "      <td>11203.4</td>\n",
       "      <td>N</td>\n",
       "      <td>Web-browser</td>\n",
       "      <td>B</td>\n",
       "      <td>S133</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>26</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ID000527H20</td>\n",
       "      <td>Female</td>\n",
       "      <td>Pune</td>\n",
       "      <td>500000</td>\n",
       "      <td>500000.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>ICICI Bank</td>\n",
       "      <td>N</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>Web-browser</td>\n",
       "      <td>B</td>\n",
       "      <td>S133</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>38</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>ID000655F00</td>\n",
       "      <td>Female</td>\n",
       "      <td>Delhi</td>\n",
       "      <td>150000</td>\n",
       "      <td>1000000.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>HDFC Bank</td>\n",
       "      <td>N</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>Web-browser</td>\n",
       "      <td>B</td>\n",
       "      <td>S133</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>44</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>ID000757D20</td>\n",
       "      <td>Male</td>\n",
       "      <td>othercity</td>\n",
       "      <td>27000</td>\n",
       "      <td>200000.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>otheraccout</td>\n",
       "      <td>Y</td>\n",
       "      <td>...</td>\n",
       "      <td>4916.9</td>\n",
       "      <td>Y</td>\n",
       "      <td>Web-browser</td>\n",
       "      <td>B</td>\n",
       "      <td>S133</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>39</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            ID  Gender       City  Monthly_Income  Loan_Amount_Applied  \\\n",
       "0  ID000269J40    Male      Delhi           43000             200000.0   \n",
       "1  ID000467Z20    Male      Delhi           37200             400000.0   \n",
       "2  ID000527H20  Female       Pune          500000             500000.0   \n",
       "3  ID000655F00  Female      Delhi          150000            1000000.0   \n",
       "4  ID000757D20    Male  othercity           27000             200000.0   \n",
       "\n",
       "   Loan_Tenure_Applied  Existing_EMI  Employer_Name Salary_Account  \\\n",
       "0                  3.0             1              1    otheraccout   \n",
       "1                  4.0             0              1       Citibank   \n",
       "2                  5.0             1              1     ICICI Bank   \n",
       "3                  3.0             1              1      HDFC Bank   \n",
       "4                  5.0             0              1    otheraccout   \n",
       "\n",
       "  Mobile_Verified         ...          EMI_Loan_Submitted Filled_Form  \\\n",
       "0               Y         ...                         NaN           N   \n",
       "1               Y         ...                     11203.4           N   \n",
       "2               N         ...                         NaN           N   \n",
       "3               N         ...                         NaN           N   \n",
       "4               Y         ...                      4916.9           Y   \n",
       "\n",
       "   Device_Type  Var2  Source  Var4  LoggedIn Disbursed Age Lead_Creation_month  \n",
       "0  Web-browser     B    S143     3         1       1.0  38                   5  \n",
       "1  Web-browser     B    S133     4         1       1.0  26                   5  \n",
       "2  Web-browser     B    S133     3         1       1.0  38                   5  \n",
       "3  Web-browser     B    S133     3         1       1.0  44                   5  \n",
       "4  Web-browser     B    S133     5         1       1.0  39                   5  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# path to where the data lies\n",
    "\n",
    "data = pd.read_csv(\"FE_homework_WK3.csv\")\n",
    "\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import LabelEncoder\n",
    "labelencoder=LabelEncoder()\n",
    "columns_obj=['Gender','City','Salary_Account','Mobile_Verified','Var1','Filled_Form','Device_Type','Var2','Source']\n",
    "for col in columns_obj:\n",
    "    data[col] = labelencoder.fit_transform(data[col])\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 16273 entries, 0 to 16272\n",
      "Data columns (total 26 columns):\n",
      "ID                       16273 non-null object\n",
      "Gender                   16273 non-null int64\n",
      "City                     16273 non-null int64\n",
      "Monthly_Income           16273 non-null int64\n",
      "Loan_Amount_Applied      16262 non-null float64\n",
      "Loan_Tenure_Applied      16262 non-null float64\n",
      "Existing_EMI             16273 non-null int64\n",
      "Employer_Name            16273 non-null int64\n",
      "Salary_Account           16273 non-null int64\n",
      "Mobile_Verified          16273 non-null int64\n",
      "Var5                     16273 non-null int64\n",
      "Var1                     16273 non-null int64\n",
      "Loan_Amount_Submitted    10051 non-null float64\n",
      "Loan_Tenure_Submitted    10051 non-null float64\n",
      "Interest_Rate            5274 non-null float64\n",
      "Processing_Fee           5225 non-null float64\n",
      "EMI_Loan_Submitted       5274 non-null float64\n",
      "Filled_Form              16273 non-null int64\n",
      "Device_Type              16273 non-null int64\n",
      "Var2                     16273 non-null int64\n",
      "Source                   16273 non-null int64\n",
      "Var4                     16273 non-null int64\n",
      "LoggedIn                 16273 non-null int64\n",
      "Disbursed                16273 non-null float64\n",
      "Age                      16273 non-null int64\n",
      "Lead_Creation_month      16273 non-null int64\n",
      "dtypes: float64(8), int64(17), object(1)\n",
      "memory usage: 3.2+ MB\n"
     ]
    }
   ],
   "source": [
    "data.info()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = data['Disbursed']\n",
    "data = data.drop(['Disbursed','ID'], axis=1)\n",
    "X_train = np.array(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='logloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='logloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    #train_predprob = alg.predict_proba(X_train)\n",
    "    #logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "   #Print model report:\n",
    "   # print (\"logloss of train :\" )\n",
    "   # print logloss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'binary:logistic',\n",
    "        scale_pos_weight=11,     #样本权重正例1273，负例15000,\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "#param = {'max_depth':2, 'eta':0.1, 'silent':0, 'objective':'binary:logistic' }\n",
    "#xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "#n_estimators = 1000\n",
    "#early_stopping_rounds = 10\n",
    "#cv_result = xgb.cv(param, xgtrain, num_boost_round=n_estimators, nfold =5,\n",
    "             #metrics='logloss', early_stopping_rounds=early_stopping_rounds)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/lusha/.local/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-logloss-mean']\n",
    "test_stds = cvresult['test-logloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-logloss-mean']\n",
    "train_stds = cvresult['train-logloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "n_estimators=cvresult.shape[0]\n",
    "\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "77"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cvresult.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>train-logloss-mean</th>\n",
       "      <th>train-logloss-std</th>\n",
       "      <th>test-logloss-mean</th>\n",
       "      <th>test-logloss-std</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>n_estimators</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.627323</td>\n",
       "      <td>0.024230</td>\n",
       "      <td>0.627412</td>\n",
       "      <td>0.023892</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.558378</td>\n",
       "      <td>0.020786</td>\n",
       "      <td>0.559124</td>\n",
       "      <td>0.020729</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.508717</td>\n",
       "      <td>0.023934</td>\n",
       "      <td>0.509347</td>\n",
       "      <td>0.022899</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.479263</td>\n",
       "      <td>0.028217</td>\n",
       "      <td>0.480376</td>\n",
       "      <td>0.026867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.441334</td>\n",
       "      <td>0.040400</td>\n",
       "      <td>0.442434</td>\n",
       "      <td>0.039123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.400069</td>\n",
       "      <td>0.035781</td>\n",
       "      <td>0.401120</td>\n",
       "      <td>0.034455</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.364950</td>\n",
       "      <td>0.041119</td>\n",
       "      <td>0.366076</td>\n",
       "      <td>0.039613</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.337000</td>\n",
       "      <td>0.034746</td>\n",
       "      <td>0.338003</td>\n",
       "      <td>0.032926</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.312971</td>\n",
       "      <td>0.036649</td>\n",
       "      <td>0.314229</td>\n",
       "      <td>0.034626</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.282843</td>\n",
       "      <td>0.031551</td>\n",
       "      <td>0.284295</td>\n",
       "      <td>0.029519</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.259684</td>\n",
       "      <td>0.025360</td>\n",
       "      <td>0.261289</td>\n",
       "      <td>0.023345</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.239295</td>\n",
       "      <td>0.021452</td>\n",
       "      <td>0.241014</td>\n",
       "      <td>0.019691</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0.218506</td>\n",
       "      <td>0.018845</td>\n",
       "      <td>0.220328</td>\n",
       "      <td>0.017017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0.207624</td>\n",
       "      <td>0.013617</td>\n",
       "      <td>0.209407</td>\n",
       "      <td>0.011575</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.190886</td>\n",
       "      <td>0.012102</td>\n",
       "      <td>0.192690</td>\n",
       "      <td>0.009934</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0.179764</td>\n",
       "      <td>0.010143</td>\n",
       "      <td>0.181667</td>\n",
       "      <td>0.008706</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.168167</td>\n",
       "      <td>0.010021</td>\n",
       "      <td>0.170216</td>\n",
       "      <td>0.009197</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0.159185</td>\n",
       "      <td>0.009479</td>\n",
       "      <td>0.161417</td>\n",
       "      <td>0.009555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0.147669</td>\n",
       "      <td>0.008527</td>\n",
       "      <td>0.149869</td>\n",
       "      <td>0.008628</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0.140807</td>\n",
       "      <td>0.011346</td>\n",
       "      <td>0.143288</td>\n",
       "      <td>0.011004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>0.131552</td>\n",
       "      <td>0.010067</td>\n",
       "      <td>0.134129</td>\n",
       "      <td>0.009824</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0.125012</td>\n",
       "      <td>0.011558</td>\n",
       "      <td>0.127763</td>\n",
       "      <td>0.011653</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>0.119329</td>\n",
       "      <td>0.009656</td>\n",
       "      <td>0.122070</td>\n",
       "      <td>0.009894</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0.113914</td>\n",
       "      <td>0.010920</td>\n",
       "      <td>0.116850</td>\n",
       "      <td>0.011351</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>0.107433</td>\n",
       "      <td>0.010091</td>\n",
       "      <td>0.110518</td>\n",
       "      <td>0.010476</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>0.102561</td>\n",
       "      <td>0.009274</td>\n",
       "      <td>0.105842</td>\n",
       "      <td>0.008976</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>0.097329</td>\n",
       "      <td>0.008074</td>\n",
       "      <td>0.100730</td>\n",
       "      <td>0.007660</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>0.093319</td>\n",
       "      <td>0.006892</td>\n",
       "      <td>0.097003</td>\n",
       "      <td>0.006456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>0.090673</td>\n",
       "      <td>0.007747</td>\n",
       "      <td>0.094438</td>\n",
       "      <td>0.007531</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>0.086618</td>\n",
       "      <td>0.006969</td>\n",
       "      <td>0.090546</td>\n",
       "      <td>0.006431</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>0.058061</td>\n",
       "      <td>0.003001</td>\n",
       "      <td>0.066458</td>\n",
       "      <td>0.002312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>0.057414</td>\n",
       "      <td>0.002844</td>\n",
       "      <td>0.066121</td>\n",
       "      <td>0.002325</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>0.056569</td>\n",
       "      <td>0.002681</td>\n",
       "      <td>0.065610</td>\n",
       "      <td>0.002488</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>0.055977</td>\n",
       "      <td>0.002623</td>\n",
       "      <td>0.065390</td>\n",
       "      <td>0.002765</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>0.055158</td>\n",
       "      <td>0.002650</td>\n",
       "      <td>0.064891</td>\n",
       "      <td>0.002949</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>52</th>\n",
       "      <td>0.054534</td>\n",
       "      <td>0.002655</td>\n",
       "      <td>0.064510</td>\n",
       "      <td>0.003261</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>0.054101</td>\n",
       "      <td>0.002659</td>\n",
       "      <td>0.064421</td>\n",
       "      <td>0.003124</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54</th>\n",
       "      <td>0.053765</td>\n",
       "      <td>0.002421</td>\n",
       "      <td>0.064204</td>\n",
       "      <td>0.003589</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>0.053270</td>\n",
       "      <td>0.002527</td>\n",
       "      <td>0.063812</td>\n",
       "      <td>0.003362</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>0.052852</td>\n",
       "      <td>0.002428</td>\n",
       "      <td>0.063638</td>\n",
       "      <td>0.003326</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>0.052569</td>\n",
       "      <td>0.002597</td>\n",
       "      <td>0.063766</td>\n",
       "      <td>0.003223</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>58</th>\n",
       "      <td>0.051863</td>\n",
       "      <td>0.002490</td>\n",
       "      <td>0.063447</td>\n",
       "      <td>0.003075</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>0.051505</td>\n",
       "      <td>0.002442</td>\n",
       "      <td>0.063200</td>\n",
       "      <td>0.003041</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>0.050924</td>\n",
       "      <td>0.002221</td>\n",
       "      <td>0.062854</td>\n",
       "      <td>0.003121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>0.050512</td>\n",
       "      <td>0.002179</td>\n",
       "      <td>0.062638</td>\n",
       "      <td>0.003297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>62</th>\n",
       "      <td>0.050206</td>\n",
       "      <td>0.002177</td>\n",
       "      <td>0.062529</td>\n",
       "      <td>0.003421</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63</th>\n",
       "      <td>0.049938</td>\n",
       "      <td>0.002273</td>\n",
       "      <td>0.062442</td>\n",
       "      <td>0.003310</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64</th>\n",
       "      <td>0.049545</td>\n",
       "      <td>0.002301</td>\n",
       "      <td>0.062347</td>\n",
       "      <td>0.003410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65</th>\n",
       "      <td>0.049118</td>\n",
       "      <td>0.002107</td>\n",
       "      <td>0.062156</td>\n",
       "      <td>0.003565</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>66</th>\n",
       "      <td>0.048619</td>\n",
       "      <td>0.002119</td>\n",
       "      <td>0.061828</td>\n",
       "      <td>0.003855</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>67</th>\n",
       "      <td>0.048566</td>\n",
       "      <td>0.002178</td>\n",
       "      <td>0.061858</td>\n",
       "      <td>0.003694</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>68</th>\n",
       "      <td>0.048313</td>\n",
       "      <td>0.002211</td>\n",
       "      <td>0.061787</td>\n",
       "      <td>0.003585</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>0.048086</td>\n",
       "      <td>0.002227</td>\n",
       "      <td>0.061875</td>\n",
       "      <td>0.003603</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>70</th>\n",
       "      <td>0.047567</td>\n",
       "      <td>0.002145</td>\n",
       "      <td>0.061742</td>\n",
       "      <td>0.003743</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>0.047262</td>\n",
       "      <td>0.002377</td>\n",
       "      <td>0.061602</td>\n",
       "      <td>0.003497</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72</th>\n",
       "      <td>0.046810</td>\n",
       "      <td>0.002414</td>\n",
       "      <td>0.061436</td>\n",
       "      <td>0.003503</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>73</th>\n",
       "      <td>0.046486</td>\n",
       "      <td>0.002337</td>\n",
       "      <td>0.061441</td>\n",
       "      <td>0.003652</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74</th>\n",
       "      <td>0.046345</td>\n",
       "      <td>0.002207</td>\n",
       "      <td>0.061410</td>\n",
       "      <td>0.003913</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75</th>\n",
       "      <td>0.046172</td>\n",
       "      <td>0.002340</td>\n",
       "      <td>0.061391</td>\n",
       "      <td>0.003856</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>0.045835</td>\n",
       "      <td>0.002378</td>\n",
       "      <td>0.061337</td>\n",
       "      <td>0.003718</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>77 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "              train-logloss-mean  train-logloss-std  test-logloss-mean  \\\n",
       "n_estimators                                                             \n",
       "0                       0.627323           0.024230           0.627412   \n",
       "1                       0.558378           0.020786           0.559124   \n",
       "2                       0.508717           0.023934           0.509347   \n",
       "3                       0.479263           0.028217           0.480376   \n",
       "4                       0.441334           0.040400           0.442434   \n",
       "5                       0.400069           0.035781           0.401120   \n",
       "6                       0.364950           0.041119           0.366076   \n",
       "7                       0.337000           0.034746           0.338003   \n",
       "8                       0.312971           0.036649           0.314229   \n",
       "9                       0.282843           0.031551           0.284295   \n",
       "10                      0.259684           0.025360           0.261289   \n",
       "11                      0.239295           0.021452           0.241014   \n",
       "12                      0.218506           0.018845           0.220328   \n",
       "13                      0.207624           0.013617           0.209407   \n",
       "14                      0.190886           0.012102           0.192690   \n",
       "15                      0.179764           0.010143           0.181667   \n",
       "16                      0.168167           0.010021           0.170216   \n",
       "17                      0.159185           0.009479           0.161417   \n",
       "18                      0.147669           0.008527           0.149869   \n",
       "19                      0.140807           0.011346           0.143288   \n",
       "20                      0.131552           0.010067           0.134129   \n",
       "21                      0.125012           0.011558           0.127763   \n",
       "22                      0.119329           0.009656           0.122070   \n",
       "23                      0.113914           0.010920           0.116850   \n",
       "24                      0.107433           0.010091           0.110518   \n",
       "25                      0.102561           0.009274           0.105842   \n",
       "26                      0.097329           0.008074           0.100730   \n",
       "27                      0.093319           0.006892           0.097003   \n",
       "28                      0.090673           0.007747           0.094438   \n",
       "29                      0.086618           0.006969           0.090546   \n",
       "...                          ...                ...                ...   \n",
       "47                      0.058061           0.003001           0.066458   \n",
       "48                      0.057414           0.002844           0.066121   \n",
       "49                      0.056569           0.002681           0.065610   \n",
       "50                      0.055977           0.002623           0.065390   \n",
       "51                      0.055158           0.002650           0.064891   \n",
       "52                      0.054534           0.002655           0.064510   \n",
       "53                      0.054101           0.002659           0.064421   \n",
       "54                      0.053765           0.002421           0.064204   \n",
       "55                      0.053270           0.002527           0.063812   \n",
       "56                      0.052852           0.002428           0.063638   \n",
       "57                      0.052569           0.002597           0.063766   \n",
       "58                      0.051863           0.002490           0.063447   \n",
       "59                      0.051505           0.002442           0.063200   \n",
       "60                      0.050924           0.002221           0.062854   \n",
       "61                      0.050512           0.002179           0.062638   \n",
       "62                      0.050206           0.002177           0.062529   \n",
       "63                      0.049938           0.002273           0.062442   \n",
       "64                      0.049545           0.002301           0.062347   \n",
       "65                      0.049118           0.002107           0.062156   \n",
       "66                      0.048619           0.002119           0.061828   \n",
       "67                      0.048566           0.002178           0.061858   \n",
       "68                      0.048313           0.002211           0.061787   \n",
       "69                      0.048086           0.002227           0.061875   \n",
       "70                      0.047567           0.002145           0.061742   \n",
       "71                      0.047262           0.002377           0.061602   \n",
       "72                      0.046810           0.002414           0.061436   \n",
       "73                      0.046486           0.002337           0.061441   \n",
       "74                      0.046345           0.002207           0.061410   \n",
       "75                      0.046172           0.002340           0.061391   \n",
       "76                      0.045835           0.002378           0.061337   \n",
       "\n",
       "              test-logloss-std  \n",
       "n_estimators                    \n",
       "0                     0.023892  \n",
       "1                     0.020729  \n",
       "2                     0.022899  \n",
       "3                     0.026867  \n",
       "4                     0.039123  \n",
       "5                     0.034455  \n",
       "6                     0.039613  \n",
       "7                     0.032926  \n",
       "8                     0.034626  \n",
       "9                     0.029519  \n",
       "10                    0.023345  \n",
       "11                    0.019691  \n",
       "12                    0.017017  \n",
       "13                    0.011575  \n",
       "14                    0.009934  \n",
       "15                    0.008706  \n",
       "16                    0.009197  \n",
       "17                    0.009555  \n",
       "18                    0.008628  \n",
       "19                    0.011004  \n",
       "20                    0.009824  \n",
       "21                    0.011653  \n",
       "22                    0.009894  \n",
       "23                    0.011351  \n",
       "24                    0.010476  \n",
       "25                    0.008976  \n",
       "26                    0.007660  \n",
       "27                    0.006456  \n",
       "28                    0.007531  \n",
       "29                    0.006431  \n",
       "...                        ...  \n",
       "47                    0.002312  \n",
       "48                    0.002325  \n",
       "49                    0.002488  \n",
       "50                    0.002765  \n",
       "51                    0.002949  \n",
       "52                    0.003261  \n",
       "53                    0.003124  \n",
       "54                    0.003589  \n",
       "55                    0.003362  \n",
       "56                    0.003326  \n",
       "57                    0.003223  \n",
       "58                    0.003075  \n",
       "59                    0.003041  \n",
       "60                    0.003121  \n",
       "61                    0.003297  \n",
       "62                    0.003421  \n",
       "63                    0.003310  \n",
       "64                    0.003410  \n",
       "65                    0.003565  \n",
       "66                    0.003855  \n",
       "67                    0.003694  \n",
       "68                    0.003585  \n",
       "69                    0.003603  \n",
       "70                    0.003743  \n",
       "71                    0.003497  \n",
       "72                    0.003503  \n",
       "73                    0.003652  \n",
       "74                    0.003913  \n",
       "75                    0.003856  \n",
       "76                    0.003718  \n",
       "\n",
       "[77 rows x 4 columns]"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cvresult.head(80)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "学习率为0.1时，测试误差最小的树为77颗\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#调节树的max_depth和min_child_weight\n",
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=5, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.8, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=5, min_child_weight=1, missing=None, n_estimators=77,\n",
       "       n_jobs=1, nthread=None, objective='binary:logistic', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=11, seed=3, silent=True,\n",
       "       subsample=0.3),\n",
       "       fit_params=None, iid='warn', n_jobs=-1,\n",
       "       param_grid={'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=77,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'binary:logistic',\n",
    "        scale_pos_weight=11, #样本权重正例1273，负例15000,\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(X_train , y_train)\n",
    "\n",
    "#gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.057997 using {'max_depth': 9, 'min_child_weight': 1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('max_depth_vs_min_child_weght_1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [9, 10, 11], 'min_child_weight': [0.3, 0.5, 1]}"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#'max_depth': 9, 'min_child_weight': 1\n",
    "max_depth_2 = [9,10,11]\n",
    "min_child_weight_2 = [0.3,0.5,1]\n",
    "param_test2_2 = dict(max_depth=max_depth_2, min_child_weight=min_child_weight_2)\n",
    "param_test2_2\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "xgb2_2 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=77,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'binary:logistic',\n",
    "        scale_pos_weight=11, #样本权重正例1273，负例15000,\n",
    "        seed=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=5, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.8, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=5, min_child_weight=1, missing=None, n_estimators=77,\n",
       "       n_jobs=1, nthread=None, objective='binary:logistic', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=11, seed=3, silent=True,\n",
       "       subsample=0.3),\n",
       "       fit_params=None, iid='warn', n_jobs=-1,\n",
       "       param_grid={'max_depth': [9, 10, 11], 'min_child_weight': [0.3, 0.5, 1]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_2 = GridSearchCV(xgb2_2, param_grid = param_test2_2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_2.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.056019 using {'max_depth': 10, 'min_child_weight': 0.5}\n"
     ]
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (gsearch2_2.best_score_, gsearch2_2.best_params_))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "# best_max_depth=10; best_min_child_weight=0.5\n",
    "#再调整弱分类器数目\n",
    "def modelfit_2(alg, X_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=100):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        \n",
    "        xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "                         metrics='logloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        \n",
    "        n_estimators = cvresult.shape[0]\n",
    "        alg.set_params(n_estimators = n_estimators)\n",
    "        \n",
    "        print (cvresult)\n",
    "        #result = pd.DataFrame(cvresult)   #cv缺省返回结果为DataFrame\n",
    "        #result.to_csv('my_preds.csv', index_label = 'n_estimators')\n",
    "        cvresult.to_csv('my_preds_nestimator_second.csv', index_label = 'n_estimators')\n",
    "        \n",
    "        # plot\n",
    "        test_means = cvresult['test-logloss-mean']\n",
    "        test_stds = cvresult['test-logloss-std'] \n",
    "        \n",
    "        train_means = cvresult['train-logloss-mean']\n",
    "        train_stds = cvresult['train-logloss-std'] \n",
    "\n",
    "        x_axis = range(0, n_estimators)\n",
    "        pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "        pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "        pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "        pyplot.xlabel( 'n_estimators' )\n",
    "        pyplot.ylabel( 'Log Loss' )\n",
    "        pyplot.savefig( 'n_estimators_second.png' )\n",
    "    \n",
    "    #Fit the algorithm on the data\n",
    "    alg.fit(X_train, y_train, eval_metric='logloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "        \n",
    "    #Print model report:\n",
    "    print (\"logloss of train :\" )\n",
    "    print (logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    train-logloss-mean  train-logloss-std  test-logloss-mean  test-logloss-std\n",
      "0             0.618249           0.017031           0.619943          0.018309\n",
      "1             0.554157           0.012024           0.557130          0.013180\n",
      "2             0.487790           0.009837           0.490554          0.010769\n",
      "3             0.437185           0.014536           0.440134          0.015124\n",
      "4             0.389516           0.012013           0.392356          0.012526\n",
      "5             0.348413           0.010254           0.351259          0.010600\n",
      "6             0.312865           0.008801           0.315760          0.009019\n",
      "7             0.282002           0.007662           0.284855          0.007575\n",
      "8             0.259938           0.006237           0.263083          0.005663\n",
      "9             0.237822           0.008590           0.241321          0.007857\n",
      "10            0.218841           0.011739           0.222633          0.011166\n",
      "11            0.199503           0.010321           0.203371          0.009468\n",
      "12            0.187335           0.011739           0.191834          0.010884\n",
      "13            0.173245           0.010368           0.177922          0.009587\n",
      "14            0.159399           0.009071           0.164059          0.008082\n",
      "15            0.146939           0.008080           0.151702          0.006822\n",
      "16            0.135884           0.007197           0.140930          0.005523\n",
      "17            0.127571           0.005471           0.132878          0.003745\n",
      "18            0.119534           0.006494           0.125181          0.004640\n",
      "19            0.113147           0.004937           0.119113          0.003030\n",
      "20            0.106479           0.004059           0.112672          0.002119\n",
      "21            0.100962           0.004774           0.107758          0.002717\n",
      "22            0.095738           0.005907           0.102718          0.003755\n",
      "23            0.091230           0.006657           0.098582          0.004551\n",
      "24            0.086776           0.005613           0.094520          0.003214\n",
      "25            0.082000           0.005214           0.089898          0.002621\n",
      "26            0.078026           0.004567           0.086239          0.001717\n",
      "27            0.074438           0.004139           0.082939          0.001256\n",
      "28            0.071170           0.003934           0.079915          0.001272\n",
      "29            0.067925           0.003329           0.077067          0.001054\n",
      "..                 ...                ...                ...               ...\n",
      "32            0.061095           0.002898           0.071455          0.001479\n",
      "33            0.059113           0.003468           0.069898          0.000984\n",
      "34            0.057733           0.002938           0.068861          0.001524\n",
      "35            0.055701           0.002633           0.067218          0.001730\n",
      "36            0.053859           0.002483           0.065811          0.001847\n",
      "37            0.052616           0.002828           0.064982          0.001745\n",
      "38            0.051104           0.002630           0.063900          0.001923\n",
      "39            0.049671           0.002240           0.062967          0.002260\n",
      "40            0.048324           0.001968           0.061968          0.002683\n",
      "41            0.047144           0.001804           0.061214          0.002852\n",
      "42            0.045947           0.001535           0.060563          0.003124\n",
      "43            0.045100           0.001404           0.060096          0.003469\n",
      "44            0.044206           0.001334           0.059637          0.003635\n",
      "45            0.043278           0.001234           0.059120          0.003805\n",
      "46            0.042537           0.001241           0.058738          0.003749\n",
      "47            0.041764           0.001103           0.058352          0.003894\n",
      "48            0.040998           0.001163           0.057913          0.003931\n",
      "49            0.039945           0.001022           0.057441          0.004050\n",
      "50            0.039370           0.001077           0.057211          0.004032\n",
      "51            0.038736           0.001124           0.056990          0.004094\n",
      "52            0.038118           0.001077           0.057031          0.004302\n",
      "53            0.037481           0.000961           0.056816          0.004404\n",
      "54            0.036769           0.001046           0.056444          0.004438\n",
      "55            0.036165           0.001152           0.056355          0.004476\n",
      "56            0.035580           0.001171           0.056245          0.004487\n",
      "57            0.035021           0.001093           0.056122          0.004645\n",
      "58            0.034568           0.001154           0.056201          0.004617\n",
      "59            0.034055           0.001076           0.056101          0.004806\n",
      "60            0.033738           0.001084           0.056057          0.004767\n",
      "61            0.033335           0.000998           0.056037          0.004793\n",
      "\n",
      "[62 rows x 4 columns]\n",
      "logloss of train :\n",
      "0.03408105942701495\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#调整max_depth和min_child_weight之后再次调整n_estimators(6,4)\n",
    "xgb2_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=500,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=10,     #10 best\n",
    "        min_child_weight=0.5, #0.5 best\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'binary:logistic',\n",
    "        scale_pos_weight=11, #样本权重正例1273，负例15000,\n",
    "        seed=3)\n",
    "\n",
    "modelfit_2(xgb2_3, X_train, y_train, cv_folds = kfold)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#best 62颗树，max_depth=10,min_child_weight=0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8],\n",
       " 'colsample_bytree': [0.6, 0.7, 0.8, 0.9]}"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# subsample和colsample调优\n",
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=5, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.8, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=10, min_child_weight=0.5, missing=None, n_estimators=62,\n",
       "       n_jobs=1, nthread=None, objective='binary:logistic', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=11, seed=3, silent=True,\n",
       "       subsample=0.3),\n",
       "       fit_params=None, iid='warn', n_jobs=-1,\n",
       "       param_grid={'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8], 'colsample_bytree': [0.6, 0.7, 0.8, 0.9]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=62,  #best62\n",
    "        max_depth=10,  #best10\n",
    "        min_child_weight=0.5, #best0.5\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'binary:logistic',\n",
    "        scale_pos_weight=11, #样本权重正例1273，负例15000,\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([1.1266675 , 1.29235096, 1.50509205, 1.46572871, 1.45729957,\n",
       "        1.43148675, 1.2231967 , 1.39112272, 1.52749825, 1.55102682,\n",
       "        1.6319376 , 1.65258937, 1.386375  , 1.74412384, 1.75871787,\n",
       "        1.76826277, 1.86691437, 1.8415678 , 1.44627671, 1.6608603 ,\n",
       "        1.79476342, 1.80432587, 1.80923624, 1.81233821]),\n",
       " 'std_fit_time': array([0.03245453, 0.03756047, 0.06212217, 0.04262986, 0.02905297,\n",
       "        0.04901742, 0.01755813, 0.03087013, 0.05633355, 0.05988329,\n",
       "        0.04871537, 0.11943491, 0.1040363 , 0.11187388, 0.09350775,\n",
       "        0.07496987, 0.11173527, 0.07519408, 0.03952909, 0.05475994,\n",
       "        0.07884223, 0.07291051, 0.06551223, 0.058417  ]),\n",
       " 'mean_score_time': array([0.02616901, 0.02965016, 0.03547187, 0.02898898, 0.03150792,\n",
       "        0.03244491, 0.02030811, 0.02797384, 0.02849526, 0.02596664,\n",
       "        0.02957721, 0.02571816, 0.02616444, 0.02779565, 0.02712164,\n",
       "        0.02658839, 0.03004766, 0.03247447, 0.0268127 , 0.02603965,\n",
       "        0.0261776 , 0.02761064, 0.0239347 , 0.02607851]),\n",
       " 'std_score_time': array([0.00177589, 0.00530278, 0.00428451, 0.00277868, 0.005028  ,\n",
       "        0.00262335, 0.00413583, 0.00392897, 0.0042135 , 0.00221818,\n",
       "        0.00195894, 0.00349703, 0.00411822, 0.00306262, 0.00226825,\n",
       "        0.00300653, 0.00449639, 0.00516406, 0.00134018, 0.0024078 ,\n",
       "        0.00453633, 0.00180459, 0.00452618, 0.00205098]),\n",
       " 'param_colsample_bytree': masked_array(data=[0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.7, 0.7, 0.7, 0.7, 0.7,\n",
       "                    0.7, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.9, 0.9, 0.9, 0.9,\n",
       "                    0.9, 0.9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_subsample': masked_array(data=[0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6, 0.7,\n",
       "                    0.8, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6,\n",
       "                    0.7, 0.8],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " 'split0_test_score': array([-0.05437442, -0.05569552, -0.05633869, -0.05489919, -0.05424712,\n",
       "        -0.05455567, -0.05601282, -0.05455293, -0.05452115, -0.05462729,\n",
       "        -0.05669591, -0.05536233, -0.05708255, -0.05380156, -0.05693911,\n",
       "        -0.05636447, -0.05643292, -0.05477184, -0.05677141, -0.05653697,\n",
       "        -0.05718102, -0.05938023, -0.05838501, -0.05787399]),\n",
       " 'split1_test_score': array([-0.0599543 , -0.06031204, -0.06167851, -0.05923536, -0.0595729 ,\n",
       "        -0.06088399, -0.06151219, -0.06008653, -0.06028067, -0.0629736 ,\n",
       "        -0.06143   , -0.06209081, -0.0604989 , -0.06028734, -0.05989064,\n",
       "        -0.06084867, -0.06110945, -0.06062221, -0.06091905, -0.06206518,\n",
       "        -0.06600036, -0.06443939, -0.06596931, -0.0664856 ]),\n",
       " 'split2_test_score': array([-0.05636577, -0.058513  , -0.05400094, -0.05507044, -0.05482032,\n",
       "        -0.0546986 , -0.05460937, -0.05337371, -0.05399044, -0.0540186 ,\n",
       "        -0.05527948, -0.05424795, -0.05354438, -0.05493395, -0.05537725,\n",
       "        -0.05499974, -0.05345474, -0.05297627, -0.05695392, -0.05703516,\n",
       "        -0.05326802, -0.05555287, -0.05596088, -0.05481687]),\n",
       " 'split3_test_score': array([-0.05859626, -0.05952067, -0.05897701, -0.0604266 , -0.05760995,\n",
       "        -0.05891063, -0.06032254, -0.06115885, -0.06050411, -0.06080416,\n",
       "        -0.06028432, -0.05827961, -0.06110108, -0.06016223, -0.06046976,\n",
       "        -0.06282302, -0.0622668 , -0.06237466, -0.06075686, -0.06141226,\n",
       "        -0.0641986 , -0.06291006, -0.06297655, -0.0651062 ]),\n",
       " 'split4_test_score': array([-0.04942508, -0.0498682 , -0.04980256, -0.04942627, -0.04967912,\n",
       "        -0.05037148, -0.04896166, -0.04903305, -0.04921011, -0.05072704,\n",
       "        -0.04979107, -0.04952471, -0.04686075, -0.04962874, -0.04932072,\n",
       "        -0.04892635, -0.04769141, -0.04971901, -0.04836389, -0.04768431,\n",
       "        -0.04959056, -0.05028865, -0.05086306, -0.05175076]),\n",
       " 'mean_test_score': array([-0.05574338, -0.05678214, -0.05615976, -0.05581168, -0.05518607,\n",
       "        -0.05588423, -0.05628392, -0.05564108, -0.0557014 , -0.05663024,\n",
       "        -0.05669636, -0.05590133, -0.05581776, -0.05576287, -0.05639968,\n",
       "        -0.05679256, -0.05619121, -0.0560928 , -0.05675329, -0.05694707,\n",
       "        -0.05804785, -0.05851448, -0.0588312 , -0.05920678]),\n",
       " 'std_test_score': array([0.00368908, 0.00379291, 0.00408645, 0.00387723, 0.00336027,\n",
       "        0.00368006, 0.00447503, 0.00447635, 0.00425403, 0.00454613,\n",
       "        0.00412221, 0.00418683, 0.00523079, 0.00404918, 0.00400474,\n",
       "        0.00485958, 0.00530809, 0.00473391, 0.00455611, 0.00513987,\n",
       "        0.006264  , 0.0051303 , 0.0052926 , 0.0057344 ]),\n",
       " 'rank_test_score': array([ 4, 18, 11,  6,  1,  8, 13,  2,  3, 15, 16,  9,  7,  5, 14, 19, 12,\n",
       "        10, 17, 20, 21, 22, 23, 24], dtype=int32),\n",
       " 'split0_train_score': array([-0.03908426, -0.03338823, -0.03269508, -0.02882727, -0.02695848,\n",
       "        -0.02525593, -0.03626762, -0.03178676, -0.02733604, -0.02463562,\n",
       "        -0.02329247, -0.02046817, -0.03274967, -0.02925406, -0.02535146,\n",
       "        -0.02376652, -0.02197467, -0.02024465, -0.03229881, -0.02749719,\n",
       "        -0.02413734, -0.02269145, -0.01942082, -0.01802501]),\n",
       " 'split1_train_score': array([-0.03464081, -0.03370277, -0.03320947, -0.02850249, -0.02536913,\n",
       "        -0.02419349, -0.03410624, -0.0297174 , -0.02733895, -0.02403723,\n",
       "        -0.02193615, -0.02040723, -0.03230348, -0.02882305, -0.02679166,\n",
       "        -0.02361832, -0.0213684 , -0.01906757, -0.0321495 , -0.02724624,\n",
       "        -0.02420003, -0.02147496, -0.01899187, -0.01712708]),\n",
       " 'split2_train_score': array([-0.03931105, -0.03901302, -0.03114666, -0.03006834, -0.02686155,\n",
       "        -0.02508361, -0.03657168, -0.03136672, -0.02831978, -0.02447953,\n",
       "        -0.02275626, -0.02059754, -0.03339723, -0.02998793, -0.02711171,\n",
       "        -0.02451425, -0.02275916, -0.02167201, -0.03286884, -0.02868414,\n",
       "        -0.0250545 , -0.02199383, -0.01976031, -0.01708889]),\n",
       " 'split3_train_score': array([-0.03739683, -0.03281795, -0.03223847, -0.02915581, -0.02755833,\n",
       "        -0.0260329 , -0.03398652, -0.03051803, -0.0279231 , -0.02525565,\n",
       "        -0.02241159, -0.02024496, -0.03137637, -0.02907275, -0.02412868,\n",
       "        -0.02196919, -0.01940084, -0.01748515, -0.03102001, -0.02659672,\n",
       "        -0.02366624, -0.02115031, -0.01880634, -0.01638791]),\n",
       " 'split4_train_score': array([-0.03873038, -0.03561443, -0.03260482, -0.03187546, -0.0284377 ,\n",
       "        -0.02712226, -0.03635101, -0.03224428, -0.03034231, -0.02680392,\n",
       "        -0.02416046, -0.0213109 , -0.03340613, -0.03215295, -0.02579172,\n",
       "        -0.02337962, -0.02057756, -0.01884614, -0.03245955, -0.02908165,\n",
       "        -0.02514626, -0.02218285, -0.01948345, -0.01823507]),\n",
       " 'mean_train_score': array([-0.03783267, -0.03490728, -0.0323789 , -0.02968588, -0.02703704,\n",
       "        -0.02553764, -0.03545661, -0.03112664, -0.02825204, -0.02504239,\n",
       "        -0.02291138, -0.02060576, -0.03264658, -0.02985815, -0.02583505,\n",
       "        -0.02344958, -0.02121612, -0.01946311, -0.03215934, -0.02782119,\n",
       "        -0.02444087, -0.02189868, -0.01929256, -0.01737279]),\n",
       " 'std_train_score': array([0.00172834, 0.00225747, 0.00068978, 0.00121319, 0.00100524,\n",
       "        0.00098474, 0.00115635, 0.00090542, 0.00110949, 0.00096344,\n",
       "        0.00076555, 0.00037035, 0.00075923, 0.00121129, 0.001067  ,\n",
       "        0.00083173, 0.00115608, 0.00140993, 0.00061825, 0.00092394,\n",
       "        0.00056997, 0.00053998, 0.00034598, 0.00067526])}"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.055186 using {'colsample_bytree': 0.6, 'subsample': 0.7}\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAEKCAYAAAAvlUMdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzsnXlcVXX+/58fdhEEVFQUUVA0N8Rda1wATZ0cSzOXJssxUzMrf8042bTbVPatabXFJUezzbJcpmnaxDUV93BLBVTAFdl3Lve+f3+cKyICXhW8F/g8H4/74J5zPudz3ucA93U/n897USKCRqPRaDRVjZO9DdBoNBpN7UQLjEaj0WiqBS0wGo1Go6kWtMBoNBqNplrQAqPRaDSaakELjEaj0WiqBS0wGo1Go6kWtMBoNBqNplrQAqPRaDSaasHF3gbYk8aNG0vr1q3tbYZGo9HUKHbv3n1BRPyv1q5OC0zr1q3ZtWuXvc3QaDSaGoVS6qQt7fQUmUaj0WiqBS0wGo1Go6kWtMBoNBqNplqo02sw5WEymUhOTqagoMDepmg0JXh4eBAYGIirq6u9TdFobEYLTBmSk5Px9vamdevWKKXsbY5Gg4iQmppKcnIywcHB9jZHo7EZPUVWhoKCAho1aqTFReMwKKVo1KiRHlVrahxaYMpBi4vG0dB/k5qaiBYYjUajqSOICAWHDpEy/30Kjhyp9uvpNRiNRqOpxViKisiLiSE7Opqc9RsoPnsWlMKlUUM82rev1mvrEYyDkZGRwQcffHBd57799tvk5eVVmS1Lly5l5syZVdafrWzYsIERI0Zc83nXau+JEyf4/PPPr/k6tpKWlsaQIUMIDQ1lyJAhpKenl9suMTGR22+/nQ4dOtCxY0dOnDhRbTZp6gbFaWlkrFpN8qOPcbRvP5IemkrmmrXU69KZgFdeIXTLZvwmTKh2O7TAOBiOJDC1ncoEpri4+Ib7nzdvHlFRURw7doyoqCjmzZtXbrv777+f2bNnc/jwYXbs2EGTJk1u+NqauoWIUBgfT+rixZy4988cu+0PnHnqKfJjY/EZ+SdaLlxAu21bCXzvPXxHj8KlUaObYpeeIquEF/9zkEOns6q0z47NG/D8nzpVeHzOnDnEx8cTHh7OkCFDaNKkCV999RWFhYWMGjWKF198kdzcXMaOHUtycjJms5lnn32Wc+fOcfr0aSIiImjcuDHr168vt/8ffviBf/zjH5jNZho3bsy6detIS0tj8uTJJCQk4OnpycKFCwkLC7vsvK+//poXX3wRZ2dnfHx82LRpEydOnGDixInk5uYCMH/+fG699VY2bNjA888/j6+vL/v372fs2LF06dKFd955h/z8fFavXk2bNm2YNGkSHh4e7Nq1i6ysLN58880rRi65ubk8+uijHDhwAJPJxAsvvMCdd95Z4fNLSkpi0KBBnDp1ivvuu4/nn3+e5557joYNGzJr1iwAnn76aZo0acIXX3zB4cOHCQ8P54EHHsDPz49vv/2WnJwczGYzGzdu5PXXX7/i+QN8+umnvPvuuxQVFdGnTx8++OADnJ2dL7NlzZo1bNiwAYAHHniAQYMG8dprr13W5tChQxQXFzNkyBAAvLy8Krw3jaY0UlxM3u495KxfT/b6aEwnEwHw6NiRxjNm4BUZgUfHjnZ1ENEC42DMmzePAwcOsG/fPn766SdWrlzJjh07EBFGjhzJpk2bSElJoXnz5vz3v/8FIDMzEx8fH958803Wr19P48aNy+07JSWFhx56iE2bNhEcHExaWhoAzz//PN26dWP16tVER0dz//33s2/fvsvOnTt3Lj/++CMtWrQgIyMDgCZNmvDzzz/j4eHBsWPHmDBhQkny0N9++43Dhw/TsGFDQkJCmDJlCjt27OCdd97hvffe4+233waMUcSOHTuIj48nIiKCuLi4y6778ssvExkZyZIlS8jIyKB3794MHjyY+vXrl3uPO3bs4MCBA3h6etKrVy/uuOMOJk+ezOjRo5k1axYWi4Uvv/ySHTt20LVrV9544w2+++47wJhi27NnD7GxsTRs2JCffvqJY8eOXfH8/f39WbFiBb/++iuurq7MmDGDzz77jPvvv58pU6Ywffp0evbsyblz5wgICACgWbNmnDt37gp7jx49iq+vL6NHj+b48eMMHjyYefPmXSFWGg2AOTub3M2byV6/gZxNm7BkZqJcXfHs15dGkybhNWgQrta/OUdAC0wlVDbSuBn89NNP/PTTT3Tr1g2AnJwcjh07Rv/+/fnrX//Kk08+yYgRI+jfv79N/W3fvp0BAwaUBOs1bNgQgC1btvDNN98AEBkZSWpqKllZl4/cbrvtNiZNmsTYsWMZPXo0YGQ9mDlzJvv27cPZ2ZmjR4+WtO/Vq1fJh2ubNm24/fbbAejSpctlo6uxY8fi5OREaGgoISEh/P7771c8g7Vr1/LGG28ARpxSYmIiHTp0KPcehwwZQiPr8H/06NFs2bKFWbNm0ahRI/bu3cu5c+fo1q1bSZvyzr/4XCp6/rGxsezevZtevXoBkJ+fXzKttXjx4nL7VUqV+02yuLiYzZs3s3fvXoKCghg3bhxLly7lwQcfLLcfTd2jKDmZnGhjlJK3cxcUF+Ps54d3ZCReEYPwuu02nCr4wmVvtMA4MCLCU089xbRp0644tmfPHr7//nueeeYZoqKieO6556rVlo8++oiYmBj++9//0qNHD3bv3s17771H06ZN+e2337BYLHh4eJS0d3d3L3nv5ORUsu3k5HTZ+kbZD92y2yLCN998Q3sbvV0q6m/KlCksXbqUs2fPMnny5ArPLz0yquj5v/feezzwwAO8+uqrldrStGlTzpw5Q0BAAGfOnCl3bSUwMJDw8HBCQkIAuOuuu9i+fbsWmDqMWCwU7N9PdvR6cqKjKTx2DAC3Nm1o9JdJeEVEUK9rV1QNGOVW6yK/UmqYUuqIUipOKTWnnOPuSqkV1uMxSqnW1v2tlVL5Sql91tdHpc4Zp5SKVUodVEq9drW+ahre3t5kZ2cDMHToUJYsWUJOTg4Ap06d4vz585w+fRpPT0/uu+8+Zs+ezZ49e644tzz69u3Lpk2bOH78OEDJFFn//v357LPPAMODq3HjxjRo0OCyc+Pj4+nTpw9z587F39+fpKQkMjMzCQgIwMnJieXLl2M2m6/5fr/++mssFgvx8fEkJCRcISRDhw7lvffeQ0QA2Lt3b6X9/fzzz6SlpZWs9dx2220AjBo1ih9++IGdO3cydOhQ4OrPq6LnHxUVxcqVKzl//jxgPMeTJ68sjzFy5EiWLVsGwLJly8pdO+rVqxcZGRmkpKQAEB0dTceOHSu9R03tw5KfT3Z0NKefeYZjAwZyYtx4UhcvxtnPjyZznqTNjz/Q5r/f0eSvf8Wze/caIS5QjSMYpZQz8D4wBEgGdiql1orIoVLNHgTSRaStUmo88BowznosXkTCy/TZCHgd6CEiKUqpZUqpKBFZd5W+agyNGjXitttuo3PnzgwfPpx7772Xfv36AcYC8KeffkpcXByzZ8/GyckJV1dXPvzwQwCmTp3KsGHDaN68ebmL/P7+/ixcuJDRo0djsVhK1lBeeOEFJk+eTFhYGJ6eniUfiqWZPXs2x44dQ0SIioqia9euzJgxg7vvvptPPvmEYcOGVbguUhlBQUH07t2brKwsPvroo8tGQQDPPvsss2bNIiwsDIvFQnBwcMmaSXn07t2bu+++m+TkZO677z569uwJgJubGxEREfj6+pasb4SFheHs7EzXrl2ZNGkSfn5+l/V1++23c/jw4Suef8eOHfnnP//J7bffjsViwdXVlffff59WrVpdtgYzZ84cxo4dy8cff0yrVq346quvANi1axcfffQRixcvxtnZmTfeeIOoqChEhB49evDQQw9d83PU1DxM58+Ts2EDOdHryd22DSksxMnLC68B/fGKiMRrQH+cfXzsbeYNoS5+M6zyjpXqB7wgIkOt208BiMirpdr8aG2zTSnlApwF/IFWwHci0rlMn72AeSISZd2eCPQTkRkV9SWV3GDPnj2lbEXLw4cPVzi/r6laJk2axIgRIxgzZky1X8tisdC9e3e+/vprQkNDq/161YH+26zZiAiFR44YXl/R6ynYvx8A1xYt8IqMxDsyAs8ePVBubna29OoopXaLSM+rtavONZgWQFKp7WSgT0VtRKRYKZUJXFx9DVZK7QWygGdEZDMQB7S3Tn8lA3cBblfp60LpCyqlpgJTwfj2rKn9HDp0iBEjRjBq1KgaKy6amomlqIi8HTtLXImLT58BpagXFob/rFl4RUbgHhpaa3PNOeoi/xkgSERSlVI9gNVKqU4ikq6UehhYAViArUCba+lYRBYCC8EYwVSx3Q5Dnz59KCwsvGzf8uXL6dKli50supKlS5de13k//vgjTz755GX7goODWbVqVbntO3bsSEJCwnVdS6O5VorT08ndtIns6PXkbtmCJTcX5eFB/dtuw3vGDLwGDsTF39/eZt4UqlNgTgEtS20HWveV1ybZOq3lA6Rap7UKAURkt1IqHmgH7BKR/wD/gZLRiLmyvqrjxmoCMTEx9jah2hg6dGjJQr1G4wgUJhwvGaXk79kLFgsu/v40uOMOvCIGUb9fP5zKrC/WBapTYHYCoUqpYIwP//HAvWXarAUeALYBY4BoERGllD+QJiJmpVQIEAokACilmojIeaWUHzADGFtZX9V4fxqNpo4ixcXk791rBDxGR1NkzR/nfsstNJ4+Da+ISDw6dUQ51e1sXNUmMNZ1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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "# best 62颗树，max_depth=10,min_child_weight=0.5 colsample_bytree': 0.6, 'subsample': 0.7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [0.01, 0.05, 0.1], 'reg_lambda': [0.01, 0.05, 0.1]}"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [ 0.01,0.05,0.1]    #第一轮粗调 0.1,1，1.5，2\n",
    "reg_lambda = [0.01,0.05,0.1]      #第一轮粗调 0.1， 0.5， 1，2\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=5, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.6, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=10, min_child_weight=0.5, missing=None, n_estimators=62,\n",
       "       n_jobs=1, nthread=None, objective='binary:logistic', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=11, seed=3, silent=True,\n",
       "       subsample=0.7),\n",
       "       fit_params=None, iid='warn', n_jobs=-1,\n",
       "       param_grid={'reg_alpha': [0.01, 0.05, 0.1], 'reg_lambda': [0.01, 0.05, 0.1]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=62,  #best\n",
    "        max_depth=10,  #best\n",
    "        min_child_weight=0.5,  #best\n",
    "        gamma=0,\n",
    "        subsample=0.7, #best\n",
    "        colsample_bytree=0.6, #best\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'binary:logistic',\n",
    "        scale_pos_weight=11, #样本权重正例1273，负例15000,\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.054235 using {'reg_alpha': 0.1, 'reg_lambda': 0.1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lusha/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means_5 = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds_5 = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means_5 = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds_5 = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores_5 = np.array(test_means_5).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores_5 = np.array(train_means_5).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "#log_reg_alpha = [0,0,0,0]\n",
    "#for index in range(len(reg_alpha)):\n",
    "#   log_reg_alpha[index] = math.log10(reg_alpha[index])\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores_5[i], label= 'reg_alpha:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#best 62颗树，max_depth=10,min_child_weight=0.5 colsample_bytree': 0.6, 'subsample': 0.7 reg_alpha': 0.1, 'reg_lambda': 0.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.6, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=10, min_child_weight=0.5, missing=None, n_estimators=62,\n",
       "       n_jobs=1, nthread=None, objective='binary:logistic', random_state=0,\n",
       "       reg_alpha=0.1, reg_lambda=0.1, scale_pos_weight=11, seed=3,\n",
       "       silent=True, subsample=0.7)"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_XGB=XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=62,        #best\n",
    "        max_depth=10,           #best\n",
    "        min_child_weight=0.5,   #best\n",
    "        gamma=0,\n",
    "        subsample=0.7,          #best\n",
    "        colsample_bytree=0.6,   #best\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'binary:logistic',\n",
    "        reg_alpha= 0.1,           #best\n",
    "        reg_lambda= 0.1,        #best\n",
    "        scale_pos_weight=11, #样本权重正例1273，负例15000,\n",
    "        seed=3)\n",
    "\n",
    "model_XGB.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#特征重要性\n",
    "\n",
    "from xgboost import plot_importance\n",
    "plot_importance(model_XGB)\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "重要性排序\n",
    "1\tMonthly_Income\n",
    "2\tAge\n",
    "3\tCity\n",
    "4\tLoan_Amount_Submitted\n",
    "5\tSalary_Account\n",
    "6\tEMI_Loan_Submitted\n",
    "7\tVar5\n",
    "8\tLoan_Amount_Applied\n",
    "9\tLoan_Tenure_Applied\n",
    "10\t3.Processing_Fee\n",
    "11\tInterest_Rate\n",
    "12\tSource\n",
    "13\tLoan_Tenure_Submitted\n",
    "14\tLead_Creation_month\n",
    "15\tVar1\n",
    "16\tVar4\n",
    "17\tVar2\n",
    "18\tExisting_EMI\n",
    "19\tGender\n",
    "20\tLoggedIn\n",
    "22\tFilled_Form\n",
    "23\tDevice_Type\n",
    "24\tMobile_Verified\n",
    "25\tEmployer_Name\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7rc1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
